import turtle
import math

# 初始化设置
t = turtle.Turtle()
t.speed(0)
turtle.bgcolor("#87CEEB")  # 天空蓝背景
t.hideturtle()
t.pensize(3)

# 埃菲尔铁塔参数（比例缩放）
BASE_WIDTH = 300  # 底部宽度（实际125m缩放）
HEIGHT = 500  # 总高度（实际324m缩放）
OBSERVATION_HEIGHTS = [100, 250, 400]  # 三个观景台位置


def exponential_curve(x):
    """埃菲尔铁塔的指数曲线方程（简化版）"""
    return HEIGHT * (1 - math.exp(-x / (BASE_WIDTH / 2)))


def draw_tower_side(start_x):
    """绘制单侧塔体曲线"""
    t.penup()
    t.goto(start_x, -300)  # 底部起始点
    t.pendown()

    # 绘制右侧曲线
    for x in range(int(start_x), 0, 5):
        y = exponential_curve(abs(x)) - 300  # Y轴偏移
        t.goto(x, y)

    # 绘制左侧曲线
    for x in range(0, int(-start_x), -5):
        y = exponential_curve(abs(x)) - 300
        t.goto(x, y)


def draw_platforms():
    """绘制三个观景台"""
    t.color("#666666")
    for h in OBSERVATION_HEIGHTS:
        y = h - 300
        width = BASE_WIDTH * (1 - h / HEIGHT) * 0.8
        t.penup()
        t.goto(-width / 2, y)
        t.pendown()
        t.begin_fill()
        for _ in range(2):
            t.forward(width)
            t.left(90)
            t.forward(15)
            t.left(90)
        t.end_fill()


def draw_support_lines():
    """绘制特征性交叉支撑"""
    t.color("#444444")
    # 底部大型拱门
    t.penup()
    t.goto(-BASE_WIDTH / 2 * 0.8, -280)
    t.pendown()
    t.setheading(60)
    t.circle(-BASE_WIDTH * 0.7, 120, 50)

    # 中层交叉线
    for y in [-150, 0, 150]:
        t.penup()
        t.goto(-100, y - 300)
        t.pendown()
        t.goto(100, y - 300)

    # 上层细密支撑
    for angle in [75, 105]:
        t.penup()
        t.goto(0, 100 - 300)
        t.setheading(angle)
        t.pendown()
        t.forward(200)


def draw_spire():
    """绘制塔尖天线"""
    t.penup()
    t.goto(0, HEIGHT - 300)
    t.pendown()
    t.color("#999999")
    t.setheading(90)
    t.forward(50)
    t.backward(100)


# 主绘制流程
t.color("#333333")  # 铁灰色
# 绘制两侧塔体
draw_tower_side(BASE_WIDTH / 2)
draw_tower_side(-BASE_WIDTH / 2)
# 添加结构细节
draw_platforms()
draw_support_lines()
draw_spire()

turtle.done()